logrotate配置
你上面提到的第4点建议, 生产级的logrotate配置如何使用(AI答复)
针对Java应用日志的生产级logrotate
配置,可以实现日志自动轮转、压缩、过期清理,避免日志文件过大占用磁盘空间。以下是针对你的support-service
应用的完整配置方案:
1. 创建logrotate配置文件
在/etc/logrotate.d/
目录下创建服务专属配置文件(以服务名命名,便于维护):
sudo vim /etc/logrotate.d/support-service
2. 生产级配置内容
添加以下配置(针对/var/log/support-service/
目录下的日志):
3. 配置项说明(核心参数)
配置项 | 作用说明 |
---|---|
daily | 每天自动轮转日志(结合size 参数,达到100MB时会提前轮转) |
rotate 30 | 保留30份轮转日志(超过后自动删除最旧的,避免磁盘占满) |
size 100M | 单日志文件达到100MB时强制轮转(防止超大日志文件无法打开) |
compress | 旧日志自动用gzip压缩(压缩率约70%,显著节省空间) |
delaycompress | 当天的旧日志不压缩(方便临时查看,第二天再压缩) |
create 0640 www www | 轮转后创建新日志文件,权限为640 ,属主/属组为www (与应用一致) |
postrotate | 轮转后执行的脚本:向Java进程发送USR1 信号,通知应用切换到新日志文件 |
4. 关键注意事项(避免日志丢失)
-
Java应用日志切换支持:
大部分Java日志框架(如Logback、Log4j2)默认支持USR1
信号触发日志重新加载,无需重启应用。如果应用不支持,可改用copytruncate
(但可能丢失少量日志):# 替代postrotate的方案(适合不支持USR1信号的应用)
copytruncate # 先复制日志内容到备份文件,再清空原文件(可能丢失复制期间的日志) -
权限一致性:
create
参数需与应用运行的用户(www
)一致,否则应用可能没有权限写入新日志文件。 -
测试配置有效性:
配置后执行以下命令测试(不会实际轮转,仅输出执行计划):sudo logrotate -d /etc/logrotate.d/support-service
手动触发一次轮转(用于验证):
sudo logrotate -f /etc/logrotate.d/support-service
5. 日常维护
- 定期检查
/var/log/support-service/
目录,确认日志是否正常轮转、压缩。 - 根据磁盘空间和日志量,调整
rotate
(保留天数)和size
(触发阈值)。 - 若需归档长期日志,可在
prerotate
中添加脚本,将日志同步到对象存储(如S3、OSS)。
通过这套配置,既能保证日志完整可用,又能避免磁盘空间被无限制占用,符合生产环境的稳定性要求。